sgdk
|
00001 00014 #ifndef _VDP_H_ 00015 #define _VDP_H_ 00016 00017 00018 #include "font.h" 00019 00020 00025 #define GFX_DATA_PORT 0xC00000 00026 00030 #define GFX_CTRL_PORT 0xC00004 00031 00035 #define GFX_HVCOUNTER_PORT 0xC00008 00036 00037 00042 #define VDP_FIFOEMPTY_FLAG (1 << 9) 00043 00047 #define VDP_FIFOFULL_FLAG (1 << 8) 00048 00052 #define VDP_VINTPENDING_FLAG (1 << 7) 00053 00057 #define VDP_SPROVERFLOW_FLAG (1 << 6) 00058 00062 #define VDP_SPRCOLLISION_FLAG (1 << 5) 00063 00067 #define VDP_ODDFRAME_FLAG (1 << 4) 00068 00072 #define VDP_VBLANK_FLAG (1 << 3) 00073 00077 #define VDP_HBLANK_FLAG (1 << 2) 00078 00082 #define VDP_DMABUSY_FLAG (1 << 1) 00083 00087 #define VDP_PALMODE_FLAG (1 << 0) 00088 00094 #define WINDOW window_adr 00095 00098 #define WPLAN WINDOW 00099 00104 #define HSCRL hscrl_adr 00105 00110 #define SLIST slist_adr 00111 00116 #define APLAN aplan_adr 00117 00122 #define BPLAN bplan_adr 00123 00128 #define VDP_WINDOW WINDOW 00129 00132 #define VDP_PLAN_WINDOW VDP_WINDOW 00133 00137 #define VDP_SCROLL_H HSCRL 00138 00142 #define VDP_SPRITE_LIST SLIST 00143 00147 #define VDP_PLAN_A APLAN 00148 00152 #define VDP_PLAN_B BPLAN 00153 00158 #define HSCROLL_PLANE 0 00159 00163 #define HSCROLL_TILE 2 00164 00168 #define HSCROLL_LINE 3 00169 00174 #define VSCROLL_PLANE 0 00175 00179 #define VSCROLL_2TILE 1 00180 00186 #define INTERLACED_NONE 0 00187 00192 #define INTERLACED_MODE1 1 00193 00198 #define INTERLACED_MODE2 2 00199 00204 #define TILE_SIZE 32 00205 #define TILE_INDEX_MASK (0xFFFF / TILE_SIZE) 00206 00211 #define TILE_SPACE WINDOW 00212 00217 #define TILE_MAXNUM (TILE_SPACE / TILE_SIZE) 00218 00222 #define TILE_MAXINDEX (TILE_MAXNUM - 1) 00223 00227 #define TILE_SYSTEMINDEX 0x0000 00228 00232 #define TILE_SYSTEMLENGTH 0x10 00233 00236 #define TILE_SYSTEMLENGHT TILE_SYSTEMLENGTH 00237 00241 #define TILE_USERINDEX (TILE_SYSTEMINDEX + TILE_SYSTEMLENGTH) 00242 00246 #define TILE_FONTINDEX (TILE_MAXNUM - FONT_LEN) 00247 00251 #define TILE_USERLENGTH (TILE_FONTINDEX - TILE_USERINDEX) 00252 00255 #define TILE_USERLENGHT TILE_USERLENGTH 00256 00260 #define TILE_USERMAXINDEX (TILE_USERINDEX + TILE_USERLENGTH - 1) 00261 00265 #define TILE_SYSTEM (TILE_SYSTEMINDEX * TILE_SIZE) 00266 00270 #define TILE_USER (TILE_USERINDEX * TILE_SIZE) 00271 00275 #define TILE_FONT (TILE_FONTINDEX * TILE_SIZE) 00276 00281 #define PAL0 0 00282 00286 #define PAL1 1 00287 00291 #define PAL2 2 00292 00296 #define PAL3 3 00297 00302 #define GFX_READ_VRAM_ADDR(adr) ((0x0000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00) 00303 00307 #define GFX_READ_CRAM_ADDR(adr) ((0x0000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x20) 00308 00312 #define GFX_READ_VSRAM_ADDR(adr) ((0x0000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x10) 00313 00318 #define GFX_WRITE_VRAM_ADDR(adr) ((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00) 00319 00323 #define GFX_WRITE_CRAM_ADDR(adr) ((0xC000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x00) 00324 00328 #define GFX_WRITE_VSRAM_ADDR(adr) ((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x10) 00329 00334 #define GFX_DMA_VRAM_ADDR(adr) ((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x80) 00335 00339 #define GFX_DMA_CRAM_ADDR(adr) ((0xC000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x80) 00340 00344 #define GFX_DMA_VSRAM_ADDR(adr) ((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0x90) 00345 00350 #define GFX_DMA_VRAMCOPY_ADDR(adr) ((0x4000 + ((adr) & 0x3FFF)) << 16) + (((adr) >> 14) | 0xC0) 00351 00356 #define GFX_VERT_SCROLL(adr) GFX_WRITE_VSRAM_ADDR(adr) 00357 00361 #define GFX_HORZ_SCROLL(adr) GFX_WRITE_VRAM_ADDR(VDP_SCROLL_H + (adr)) 00362 00367 #define GET_VDPSTATUS(flag) ((*(vu16*)(GFX_CTRL_PORT)) & (flag)) 00368 00372 #define IS_PALSYSTEM GET_VDPSTATUS(VDP_PALMODE_FLAG) 00373 00378 #define GET_HVCOUNTER (*(vu16*)(GFX_HVCOUNTER_PORT)) 00379 00383 #define GET_HCOUNTER (GET_HVCOUNTER & 0xFF) 00384 00388 #define GET_VCOUNTER (GET_HVCOUNTER >> 8) 00389 00390 00399 typedef struct 00400 { 00401 u16 v; 00402 } VDPPlan; 00403 00404 00405 extern const VDPPlan PLAN_B; 00406 extern const VDPPlan PLAN_A; 00407 00408 00409 // used by define 00410 extern u16 window_adr; 00411 extern u16 aplan_adr; 00412 extern u16 bplan_adr; 00413 extern u16 hscrl_adr; 00414 extern u16 slist_adr; 00415 00420 extern u16 screenWidth; 00425 extern u16 screenHeight; 00426 00427 00434 void VDP_init(); 00435 00444 u8 VDP_getReg(u16 reg); 00454 void VDP_setReg(u16 reg, u8 value); 00455 00460 u8 VDP_getEnable(); 00467 void VDP_setEnable(u8 value); 00468 00475 u16 VDP_getScanlineNumber(); 00483 u16 VDP_getScreenHeight(); 00490 void VDP_setScreenHeight224(); 00497 void VDP_setScreenHeight240(); 00504 u16 VDP_getScreenWidth(); 00509 void VDP_setScreenWidth256(); 00514 void VDP_setScreenWidth320(); 00515 00522 u16 VDP_getPlanWidth(); 00529 u16 VDP_getPlanHeight(); 00541 void VDP_setPlanSize(u16 w, u16 h); 00542 00551 u8 VDP_getHorizontalScrollingMode(); 00560 u8 VDP_getVerticalScrollingMode(); 00581 void VDP_setScrollingMode(u16 hscroll, u16 vscroll); 00582 00583 00588 u8 VDP_getBackgroundColor(); 00593 void VDP_setBackgroundColor(u8 value); 00594 00599 u8 VDP_getAutoInc(); 00604 void VDP_setAutoInc(u8 value); 00605 00612 void VDP_setHInterrupt(u8 value); 00617 void VDP_setHilightShadow(u8 value); 00618 00623 u8 VDP_getHIntCounter(); 00631 void VDP_setHIntCounter(u8 value); 00632 00637 u16 VDP_getAPlanAddress(); 00642 u16 VDP_getBPlanAddress(); 00647 u16 VDP_getWindowAddress(); 00652 u16 VDP_getWindowPlanAddress(); 00657 u16 VDP_getSpriteListAddress(); 00662 u16 VDP_getHScrollTableAddress(); 00663 00679 void VDP_setAPlanAddress(u16 value); 00695 void VDP_setWindowAddress(u16 value); 00700 void VDP_setWindowPlanAddress(u16 value); 00716 void VDP_setBPlanAddress(u16 value); 00732 void VDP_setSpriteListAddress(u16 value); 00748 void VDP_setHScrollTableAddress(u16 value); 00749 00762 void VDP_setScanMode(u16 mode); 00763 00768 void VDP_waitDMACompletion(); 00773 void VDP_waitFIFOEmpty(); 00774 00781 void VDP_waitVSync(); 00782 00789 void VDP_resetScreen(); 00790 00791 00802 void VDP_showFPS(u16 float_display); 00803 00804 00805 #endif // _VDP_H_